package Control;

/**
 *
 * @author Araya
 */
import Modelo.RegistroHorario;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Calendar;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class ControlReportes {

    HSSFWorkbook miLibro;
    HSSFSheet miHoja;

    public void crearXLS(ArrayList<RegistroHorario> registroGrupo, String pProfe, String pGrupo, int tipo) {
        miLibro = new HSSFWorkbook();
        miHoja = miLibro.createSheet();
        int cantFilas = 24;
        crearTabla(cantFilas);
        llenarTabla(registroGrupo, pProfe, pGrupo, tipo);
// Guardamos el libro en un nuevo archivo .xls.
        try {
            if (tipo == 1) {
                FileOutputStream miArchivo = new FileOutputStream("Reportes/" + pGrupo + ".xls");
                miLibro.write(miArchivo);
                miArchivo.close();                
            } else if (tipo == 2) {
                FileOutputStream miArchivo = new FileOutputStream("Reportes/" + pGrupo + " Auxiliar" + ".xls");
                miLibro.write(miArchivo);
                miArchivo.close();
                //JOptionPane.showMessageDialog(null, "Reporte de horario auxiliar generado", "Guardado", 1);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void crearTabla(int cantFilas) {
        for (int i = 0; i < cantFilas; i++) {
            miHoja.createRow(i);
            miHoja.getRow(i).createCell(0);
            miHoja.getRow(i).createCell(1);
            miHoja.getRow(i).createCell(2);
            miHoja.getRow(i).createCell(3);
            miHoja.getRow(i).createCell(4);
            miHoja.getRow(i).createCell(5);
            miHoja.getRow(i).createCell(6);
            miHoja.getRow(i).createCell(7);
            miHoja.getRow(i).createCell(8);
            miHoja.getRow(i).createCell(9);
            miHoja.getRow(i).createCell(10);
            miHoja.getRow(i).createCell(11);
        }
    }

    private void crearPlantilla() {
        miHoja.getRow(2).getCell(0).setCellValue("LECCIÓN");
        miHoja.getRow(2).getCell(1).setCellValue("HORA");
        miHoja.getRow(2).getCell(2).setCellValue("LUNES");
        miHoja.getRow(2).getCell(3).setCellValue("N");
        miHoja.getRow(2).getCell(4).setCellValue("MARTES");
        miHoja.getRow(2).getCell(5).setCellValue("N");
        miHoja.getRow(2).getCell(6).setCellValue("MIERCOLES");
        miHoja.getRow(2).getCell(7).setCellValue("N");
        miHoja.getRow(2).getCell(8).setCellValue("JUEVES");
        miHoja.getRow(2).getCell(9).setCellValue("N");
        miHoja.getRow(2).getCell(10).setCellValue("VIERNES");
        miHoja.getRow(2).getCell(11).setCellValue("N");
        crearLecciones();
        crearHoras();

    }

    private void crearLecciones() {
        miHoja.getRow(3).getCell(0).setCellValue("1");
        miHoja.getRow(4).getCell(0).setCellValue("2");
        //recreo
        miHoja.getRow(6).getCell(0).setCellValue("3");
        miHoja.getRow(7).getCell(0).setCellValue("4");
        //recreo
        miHoja.getRow(9).getCell(0).setCellValue("5");
        miHoja.getRow(10).getCell(0).setCellValue("6");
        //recreo
        miHoja.getRow(12).getCell(0).setCellValue("7");
        miHoja.getRow(13).getCell(0).setCellValue("8");
        //recreo
        miHoja.getRow(15).getCell(0).setCellValue("1");
        miHoja.getRow(16).getCell(0).setCellValue("2");
        //recreo
        miHoja.getRow(18).getCell(0).setCellValue("3");
        miHoja.getRow(19).getCell(0).setCellValue("4");
        //recreo
        miHoja.getRow(21).getCell(0).setCellValue("5");
        miHoja.getRow(22).getCell(0).setCellValue("6");
    }

    private void crearHoras() {
        miHoja.getRow(3).getCell(1).setCellValue("7:00-7:40");
        miHoja.getRow(4).getCell(1).setCellValue("7:40-8:20");
        miHoja.getRow(5).getCell(6).setCellValue("Recreo 5 minutos");
        miHoja.getRow(6).getCell(1).setCellValue("8:25-9:05");
        miHoja.getRow(7).getCell(1).setCellValue("9:05-9:45");
        miHoja.getRow(8).getCell(6).setCellValue("Recreo 20 minutos");
        miHoja.getRow(9).getCell(1).setCellValue("10:05-10:45");
        miHoja.getRow(10).getCell(1).setCellValue("10:45-11:25");
        miHoja.getRow(11).getCell(6).setCellValue("Recreo 5 minutos");
        miHoja.getRow(12).getCell(1).setCellValue("11:30-12:10");
        miHoja.getRow(13).getCell(1).setCellValue("12:10-12:50");
        miHoja.getRow(14).getCell(6).setCellValue("Almuerzo 40 minutos");
        miHoja.getRow(15).getCell(1).setCellValue("1:30-2:10");
        miHoja.getRow(16).getCell(1).setCellValue("2:10-2:50");
        miHoja.getRow(17).getCell(6).setCellValue("Recreo 5 minutos");
        miHoja.getRow(18).getCell(1).setCellValue("2:55-3:35");
        miHoja.getRow(19).getCell(1).setCellValue("3:35-4:15");
        miHoja.getRow(20).getCell(6).setCellValue("Recreo 10 minutos");
        miHoja.getRow(21).getCell(1).setCellValue("4:25-5:05");
        miHoja.getRow(22).getCell(1).setCellValue("5:05-5:45");
    }

    private void llenarTabla(ArrayList<RegistroHorario> registroGrupo, String pProfe, String pGrupo, int tipo) {
        limpiarTabla();
        if (tipo == 1) {
            miHoja.getRow(0).getCell(6).setCellValue("Sección " + pGrupo);
        } else if (tipo == 2) {
            miHoja.getRow(0).getCell(6).setCellValue("Horario TEMPORAL Sección " + pGrupo);
        }
        miHoja.getRow(1).getCell(6).setCellValue("Profesor guía: " + pProfe);
        crearPlantilla();
        for (int i = 3; i < 22; i++) {
            for (int j = 0; j < registroGrupo.size(); j++) {
                for (int k = 2; k < 12; k = k + 2) {
                    if ((i - 3 == Integer.parseInt(registroGrupo.get(j).getHora()))
                            && Integer.parseInt(registroGrupo.get(j).getDia()) == k - 1) {
                        miHoja.getRow(i).getCell(k).setCellValue(registroGrupo.get(j).getNombreMateria());
                    }
                }
            }
        }
        llenarAulas(registroGrupo);
    }

    private void llenarAulas(ArrayList<RegistroHorario> registroGrupo) {
        for (int i = 3; i < 22; i++) {
            for (int j = 0; j < registroGrupo.size(); j++) {
                for (int k = 3; k < 12; k = k + 2) {
                    if ((i - 3 == Integer.parseInt(registroGrupo.get(j).getHora()))
                            && Integer.parseInt(registroGrupo.get(j).getDia()) == k - 2) {
                        miHoja.getRow(i).getCell(k).setCellValue(registroGrupo.get(j).getIdAula());
                    }
                }
            }
        }
    }

    private void limpiarTabla() {
        for (int i = 3; i < 22; i++) {
            for (int j = 2; j < 12; j = j + 2) {
                miHoja.getRow(i).getCell(j).setCellValue("");
            }
        }
        for (int i = 3; i < 22; i++) {
            for (int j = 3; j < 12; j = j + 2) {
                miHoja.getRow(i).getCell(j).setCellValue("");
            }
        }
    }

}
